package DataStorage;

import java.util.Arrays;
import java.util.List;

import org.hibernate.HibernateException;
import org.hibernate.criterion.Restrictions;

import HibernateSQLite.java.model.TNC_Objectif;

public class TNC_ObjectifDAOHibernate extends
		GenericDAOHibernate<TNC_Objectif, Long, ITNC_ObjectifDAO> implements
		ITNC_ObjectifDAO {

	@SuppressWarnings("unchecked")
	public boolean isExist(long TNC_Objectif_id) {
		try {
			List<TNC_Objectif> list = getSession()
					.createCriteria(TNC_Objectif.class)
					.add(Restrictions.eq("TNC_Objectif_id", TNC_Objectif_id))
					.list();
			if (!list.isEmpty()) {
				return true;
			}
		} catch (HibernateException e) {
			e.printStackTrace();
		} finally {
			this.closeSession();
		}
		return false;
	}

	@SuppressWarnings("unchecked")
	public boolean isExistInformationLigne_id(long InformationLigne_id) {
		try {
			List<TNC_Objectif> list = getSession()
					.createCriteria(TNC_Objectif.class)
					.add(Restrictions.eq("InformationLigne_id",
							InformationLigne_id)).list();
			if (!list.isEmpty()) {
				return true;
			}
		} catch (HibernateException e) {
			e.printStackTrace();
		} finally {
			this.closeSession();
		}
		return false;
	}

	@SuppressWarnings("unchecked")
	public boolean isExist(String CLASSE, String TNC_Objectf_renault,
			long InformationLigne_id) {
		try {
			List<TNC_Objectif> list = getSession()
					.createCriteria(TNC_Objectif.class)
					.add(Restrictions.eq("CLASSE", CLASSE))
					.add(Restrictions.eq("TNC_Objectf_renault",
							TNC_Objectf_renault))
					.add(Restrictions.eq("InformationLigne_id",
							InformationLigne_id)).list();
			if (!list.isEmpty()) {
				return true;
			}
		} catch (HibernateException e) {
			e.printStackTrace();
		} finally {
			this.closeSession();
		}
		return false;
	}

	public boolean isExist(TNC_Objectif tnc_objectif) {
		if (!tnc_objectif.equals(null)) {
			long InformationLigne_id = tnc_objectif.getInformationLigne_id();
			List<TNC_Objectif> list = this
					.getListTNC_Objectif(InformationLigne_id);
			if (list.contains(tnc_objectif)) {
				return true;
			} else {
				return false;
			}
		}

		return false;
	}

	@SuppressWarnings("unchecked")
	public String getTNC_Objectif_Qdas(String CLASSE) {
		try {
			String TNC_Objectf_Qdas = "";
			List<TNC_Objectif> list = getSession()
					.createCriteria(TNC_Objectif.class)
					.add(Restrictions.eq("CLASSE", CLASSE)).list();
			for (TNC_Objectif tnc_objectif : list) {
				TNC_Objectf_Qdas = tnc_objectif.getTNC_Objectf_Qdas();
			}
			return TNC_Objectf_Qdas;
		} catch (HibernateException e) {
			e.printStackTrace();
		} finally {
			this.closeSession();
		}
		return null;
	}

	@SuppressWarnings("unchecked")
	public List<TNC_Objectif> getListTNC_Objectif(long InformationLigne_id) {
		try {
			List<TNC_Objectif> list = getSession()
					.createCriteria(TNC_Objectif.class)
					.add(Restrictions.eq("InformationLigne_id",
							InformationLigne_id)).list();

			return list;
		} catch (HibernateException e) {
			e.printStackTrace();
		} finally {
			this.closeSession();
		}
		return null;
	}

	public void saveTNC_Objectif(String CLASS, String TNC_Objectf_renault,
			long InformationLigne_id) {

		TNC_Objectif tnc_objectif = null;
		try {
			if (!isExist(CLASS, TNC_Objectf_renault, InformationLigne_id)) {
				tnc_objectif = new TNC_Objectif();
				tnc_objectif.setCLASSE(CLASS);
				tnc_objectif.setTNC_Objectf_renault(TNC_Objectf_renault);
				tnc_objectif.setInformationLigne_id(InformationLigne_id);
				String TNC_Objectf_Qdas = "";
				if (TNC_Objectf_renault.equals("1 ppm")) {
					TNC_Objectf_Qdas = "4";
				}
				if (TNC_Objectf_renault.equals("100 ppm")) {
					TNC_Objectf_Qdas = "3";
				}
				if (TNC_Objectf_renault.equals("2700 ppm")) {
					TNC_Objectf_Qdas = "2";
				}
				tnc_objectif.setTNC_Objectf_Qdas(TNC_Objectf_Qdas);
				getSession().save(tnc_objectif);
			} else {
				System.out.println("This element has been the existence !");
			}
			this.commit();
		} catch (HibernateException e) {
			e.printStackTrace();
		} finally {
			this.closeSession();
		}
	}

	public void saveTNC_Objectif(List<String> CLASS,
			List<String> TNC_Objectf_renault, long InformationLigne_id) {

		int sizeCLASS = CLASS.size();
		int sizeTNC_Objectf_renault = TNC_Objectf_renault.size();
		String[] arr_CLASS = (String[]) CLASS.toArray(new String[sizeCLASS]);
		String[] arr_TNC_Objectf_renault = (String[]) TNC_Objectf_renault
				.toArray(new String[sizeTNC_Objectf_renault]);

		if (sizeCLASS == sizeTNC_Objectf_renault) {

			for (int i = 0; i < sizeCLASS; i++) {
				this.saveTNC_Objectif(arr_CLASS[i], arr_TNC_Objectf_renault[i],
						InformationLigne_id);
			}
		} else {
			System.out.println("erreur input");
		}

	}

	public void deleteTNC_Objectifs(long InformationLigne_id) {
		if (this.isExistInformationLigne_id(InformationLigne_id)) {
			List<TNC_Objectif> listTNC_ObjectifDAO = getListTNC_Objectif(InformationLigne_id);
			this.deleAll(listTNC_ObjectifDAO);
		}
	}

	public static void main(String[] agrs) {
		TNC_ObjectifDAOHibernate t = new TNC_ObjectifDAOHibernate();
		
		  List<String> CLASS = Arrays.asList("A1", "A2", "B1", "B2", "C1",
		  "C2"); List<String> TNC_Objectf_renault = Arrays.asList("100 ppm",
		  "100 ppm", "2700 ppm", "2700 ppm", "2700 ppm", "2700 ppm"); long
		  InformationLigne_id = 2; t.saveTNC_Objectif(CLASS,
		TNC_Objectf_renault, InformationLigne_id);
		 
		//long InformationLigne_id = 2;
		//t.deleteTNC_Objectifs(InformationLigne_id);
	}

}
